// pages/profile/profile.js
Page({
  /**
   * 页面的初始数据
   */
  data: {
    userInfo: null,
    hasUserInfo: false,
    canIUseGetUserProfile: false,
    stats: {
      courseCount: 0,
      studyTime: 0,
      examCount: 0,
      certificateCount: 0
    },
    menuItems: [
      {
        id: 'courses',
        title: '我的课程',
        icon: '/images/icons/my-courses.png',
        url: '/pages/profile/courses/courses',
        badge: 0
      },
      {
        id: 'exams',
        title: '我的考试',
        icon: '/images/icons/my-exams.png',
        url: '/pages/profile/exams/exams',
        badge: 0
      },
      {
        id: 'favorites',
        title: '我的收藏',
        icon: '/images/icons/favorites.png',
        url: '/pages/profile/favorites/favorites',
        badge: 0
      },
      {
        id: 'certificates',
        title: '我的证书',
        icon: '/images/icons/certificates.png',
        url: '/pages/profile/certificates/certificates',
        badge: 0
      },
      {
        id: 'study-plan',
        title: '学习计划',
        icon: '/images/icons/study-plan.png',
        url: '/pages/profile/study-plan/study-plan',
        badge: 0
      },
      {
        id: 'notes',
        title: '学习笔记',
        icon: '/images/icons/notes.png',
        url: '/pages/profile/notes/notes',
        badge: 0
      }
    ],
    settingItems: [
      {
        id: 'settings',
        title: '设置',
        icon: '/images/icons/settings.png',
        url: '/pages/profile/settings/settings'
      },
      {
        id: 'feedback',
        title: '意见反馈',
        icon: '/images/icons/feedback.png',
        url: '/pages/profile/feedback/feedback'
      },
      {
        id: 'about',
        title: '关于我们',
        icon: '/images/icons/about.png',
        url: '/pages/profile/about/about'
      }
    ],
    loading: true
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 检查是否支持getUserProfile
    if (wx.getUserProfile) {
      this.setData({
        canIUseGetUserProfile: true
      })
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    // 设置页面标题
    wx.setNavigationBarTitle({
      title: '个人中心'
    })
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 检查登录状态
    this.checkLoginStatus()
    
    // 如果已登录，加载用户数据
    if (this.data.hasUserInfo) {
      this.loadUserData()
    } else {
      this.setData({
        loading: false
      })
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    if (this.data.hasUserInfo) {
      this.loadUserData().finally(() => {
        wx.stopPullDownRefresh()
      })
    } else {
      wx.stopPullDownRefresh()
    }
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    return {
      title: '苒兴教育 - 专业的在线学习平台',
      path: '/pages/index/index',
      imageUrl: '/images/share-bg.jpg'
    }
  },

  /**
   * 分享到朋友圈
   */
  onShareTimeline: function () {
    return {
      title: '苒兴教育 - 专业的在线学习平台',
      imageUrl: '/images/share-bg.jpg'
    }
  },

  /**
   * 检查登录状态
   */
  checkLoginStatus: function () {
    const app = getApp()
    const userInfo = app.globalData.userInfo
    
    if (userInfo) {
      this.setData({
        userInfo: userInfo,
        hasUserInfo: true
      })
    } else {
      this.setData({
        userInfo: null,
        hasUserInfo: false
      })
    }
  },

  /**
   * 获取用户信息
   */
  getUserProfile: function () {
    wx.getUserProfile({
      desc: '用于完善用户资料',
      success: (res) => {
        const userInfo = res.userInfo
        this.setData({
          userInfo: userInfo,
          hasUserInfo: true
        })
        
        // 保存到全局数据
        const app = getApp()
        app.globalData.userInfo = userInfo
        
        // 登录
        this.login(userInfo)
      },
      fail: (err) => {
        console.error('获取用户信息失败', err)
        wx.showToast({
          title: '获取用户信息失败',
          icon: 'none'
        })
      }
    })
  },

  /**
   * 登录
   */
  login: function (userInfo) {
    wx.login({
      success: (res) => {
        if (res.code) {
          // 发送登录请求
          wx.request({
            url: getApp().globalData.apiBase + '/auth/login',
            method: 'POST',
            data: {
              code: res.code,
              userInfo: userInfo
            },
            success: (response) => {
              if (response.data.success) {
                // 保存token
                wx.setStorageSync('token', response.data.data.token)
                
                // 更新全局数据
                const app = getApp()
                app.globalData.token = response.data.data.token
                app.globalData.userInfo = response.data.data.userInfo
                
                // 更新本地用户信息
                this.setData({
                  userInfo: response.data.data.userInfo
                })
                
                // 加载用户数据
                this.loadUserData()
                
                wx.showToast({
                  title: '登录成功',
                  icon: 'success'
                })
              } else {
                wx.showToast({
                  title: response.data.message || '登录失败',
                  icon: 'none'
                })
              }
            },
            fail: (err) => {
              console.error('登录请求失败', err)
              wx.showToast({
                title: '网络错误',
                icon: 'none'
              })
            }
          })
        } else {
          console.error('获取登录凭证失败', res.errMsg)
        }
      },
      fail: (err) => {
        console.error('wx.login失败', err)
      }
    })
  },

  /**
   * 加载用户数据
   */
  loadUserData: function () {
    return new Promise((resolve, reject) => {
      const token = wx.getStorageSync('token')
      if (!token) {
        this.setData({
          loading: false
        })
        resolve()
        return
      }
      
      wx.request({
        url: getApp().globalData.apiBase + '/user/profile',
        method: 'GET',
        header: {
          'Authorization': `Bearer ${token}`
        },
        success: (res) => {
          if (res.data.success) {
            const userData = res.data.data
            
            this.setData({
              userInfo: userData.userInfo,
              stats: userData.stats,
              loading: false
            })
            
            // 更新菜单徽章
            this.updateMenuBadges(userData.stats)
          } else {
            console.error('加载用户数据失败', res.data.message)
          }
          
          this.setData({
            loading: false
          })
          resolve(res)
        },
        fail: (err) => {
          console.error('加载用户数据失败', err)
          this.setData({
            loading: false
          })
          reject(err)
        }
      })
    })
  },

  /**
   * 更新菜单徽章
   */
  updateMenuBadges: function (stats) {
    const menuItems = this.data.menuItems.map(item => {
      switch (item.id) {
        case 'courses':
          item.badge = stats.newCourseCount || 0
          break
        case 'exams':
          item.badge = stats.pendingExamCount || 0
          break
        case 'certificates':
          item.badge = stats.newCertificateCount || 0
          break
        default:
          item.badge = 0
      }
      return item
    })
    
    this.setData({
      menuItems: menuItems
    })
  },

  /**
   * 菜单项点击
   */
  onMenuTap: function (e) {
    const item = e.currentTarget.dataset.item
    
    if (!this.data.hasUserInfo) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }
    
    wx.navigateTo({
      url: item.url
    })
  },

  /**
   * 设置项点击
   */
  onSettingTap: function (e) {
    const item = e.currentTarget.dataset.item
    
    wx.navigateTo({
      url: item.url
    })
  },

  /**
   * 编辑资料
   */
  editProfile: function () {
    if (!this.data.hasUserInfo) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }
    
    wx.navigateTo({
      url: '/pages/profile/edit/edit'
    })
  },

  /**
   * 查看学习统计
   */
  viewStats: function () {
    if (!this.data.hasUserInfo) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }
    
    wx.navigateTo({
      url: '/pages/profile/stats/stats'
    })
  },

  /**
   * 退出登录
   */
  logout: function () {
    wx.showModal({
      title: '确认退出',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          this.doLogout()
        }
      }
    })
  },

  /**
   * 执行退出登录
   */
  doLogout: function () {
    // 清除本地存储
    wx.removeStorageSync('token')
    
    // 清除全局数据
    const app = getApp()
    app.globalData.token = null
    app.globalData.userInfo = null
    
    // 更新页面状态
    this.setData({
      userInfo: null,
      hasUserInfo: false,
      stats: {
        courseCount: 0,
        studyTime: 0,
        examCount: 0,
        certificateCount: 0
      }
    })
    
    wx.showToast({
      title: '已退出登录',
      icon: 'success'
    })
  },

  /**
   * 联系客服
   */
  contactService: function () {
    wx.makePhoneCall({
      phoneNumber: '400-123-4567',
      fail: (err) => {
        console.error('拨打电话失败', err)
        wx.showToast({
          title: '拨打失败',
          icon: 'none'
        })
      }
    })
  },

  /**
   * 扫码功能
   */
  scanCode: function () {
    wx.scanCode({
      success: (res) => {
        console.log('扫码结果', res)
        
        // 处理扫码结果
        this.handleScanResult(res.result)
      },
      fail: (err) => {
        console.error('扫码失败', err)
        if (err.errMsg !== 'scanCode:fail cancel') {
          wx.showToast({
            title: '扫码失败',
            icon: 'none'
          })
        }
      }
    })
  },

  /**
   * 处理扫码结果
   */
  handleScanResult: function (result) {
    try {
      // 尝试解析为JSON
      const data = JSON.parse(result)
      
      if (data.type === 'course') {
        // 跳转到课程详情
        wx.navigateTo({
          url: `/pages/course/detail/detail?id=${data.id}`
        })
      } else if (data.type === 'exam') {
        // 跳转到考试详情
        wx.navigateTo({
          url: `/pages/exam/detail/detail?id=${data.id}`
        })
      } else {
        wx.showToast({
          title: '无效的二维码',
          icon: 'none'
        })
      }
    } catch (e) {
      // 如果不是JSON，可能是URL
      if (result.startsWith('http')) {
        wx.navigateTo({
          url: `/pages/webview/webview?url=${encodeURIComponent(result)}`
        })
      } else {
        wx.showToast({
          title: '无效的二维码',
          icon: 'none'
        })
      }
    }
  },

  /**
   * 查看消息
   */
  viewMessages: function () {
    if (!this.data.hasUserInfo) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      })
      return
    }
    
    wx.navigateTo({
      url: '/pages/profile/messages/messages'
    })
  }
})